<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 1. 先将字符串格式的时间类型转化为Date类型
        var str = '2020-04-16'; //字符串格式的时间类型
        var str1 = str.replace(/-/g, '/'); //'2018/01/01'
        console.log(str1)
        var date = new Date(Date.parse(str1)); //date格式的时间类型
        console.log(date)
        // 2. 再将Date类型的时间增加指定月份
        var nowDate = date.addMonth(3); //date格式的时间类型
        Date.prototype.addMonth = function (addMonth) {
            var y = this.getFullYear();
            var m = this.getMonth();
            var nextY = y;
            var nextM = m;
            //如果当前月+要加上的月>11 这里之所以用11是因为 js的月份从0开始
            if ((m + addMonth) > 11) {
                nextY = y + 1;
                nextM = parseInt(m + addMonth) - 12;
            } else {
                nextM = this.getMonth() + addMonth
            }
            var daysInNextMonth = Date.daysInMonth(nextY, nextM);
            var day = this.getDate();
            if (day > daysInNextMonth) {
                day = daysInNextMonth;
            }
            return new Date(nextY, nextM, day);
        };
        Date.daysInMonth = function (year, month) {
            if (month == 1) {
                if (year % 4 == 0 && year % 100 != 0)
                    return 29;
                else
                    return 28;
            } else if ((month <= 6 && month % 2 == 0) || (month = 6 && month % 2 == 1))
                return 31;
            else
                return 30;
        };
        // 3. 最后将Date类型的时间在转化为字符串类型
        var nowStr = nowDate.format('yyyy-MM-dd hh:mm:ss'); //指定字符串格式的时间类型

        Date.prototype.format = function (format) {
            var date = {
                "M+": this.getMonth() + 1,
                "d+": this.getDate(),
                "h+": this.getHours(),
                "m+": this.getMinutes(),
                "s+": this.getSeconds(),
                "q+": Math.floor((this.getMonth() + 3) / 3),
                "S+": this.getMilliseconds()
            };
            if (/(y+)/i.test(format)) {
                format = format.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
            }
            for (var k in date) {
                if (new RegExp("(" + k + ")").test(format)) {
                    format = format.replace(RegExp.$1, RegExp.$1.length == 1
                        ? date[k] : ("00" + date[k]).substr(("" + date[k]).length));
                }
            }
            return format;
        };
    </script>
</head>

<body>

</body>

</html>